package com.hotel.utils.jwt;

import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.apache.logging.log4j.util.Strings;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.UUID;

//优惠券的登录注册  Jwt的工具类
public class JwtUtil {
    //    定义常量设置过期时间
    public static final long EX_TIME=1000*60*60*24;
    //    定义常量加密盐
    public static final String ADD_SALT="tianmingcun";
    //    加密方法  生成的token是一个字符串
    public static String createToken(String userAdmin,String userPwd) {
        JwtBuilder jwtBuilder = Jwts.builder(); //builder()用来构建JWT这个对象
        String token = jwtBuilder
//                token由三部分组成  header payload（载荷）  签名
//                头部
                .setHeaderParam("typ", "JWT")
                .setHeaderParam("alg", "HS256")
//                载荷
                //存储用户的id和姓名
                .claim("userAdmin", userAdmin)
                .claim("password", userPwd)
                .setSubject("person")   //设置jwt所面向的用户
                 .setIssuedAt(new Date())  //设置生效时间
                .setExpiration(new Date(System.currentTimeMillis() + EX_TIME)) //失效时间

                //自动生成主键
                .setId(UUID.randomUUID().toString())
//                签名
                .signWith(SignatureAlgorithm.HS256, ADD_SALT)
                .compact(); //生成的字符串就是jwt的信息，要将这个值返回出去
        return token;
    }
////    解密方法
//    public static boolean checkToken(String token){
////        解密之前先要判断一下 token是否为空 不为空  就利用key进行解密
//        if(StringUtils.isEmpty(token)) return false;
//        else Jwts.parser().setSigningKey(ADD_SALT).parsePlaintextJws(token);
//        return true;
//    }

    //    判断token是否有效  jwt是在请求头中携带，所有传入的参数是请求
    public static boolean isCheckToken(HttpServletRequest request){
        String token=request.getHeader("token");
        if(Strings.isEmpty(token)) return false;
        else Jwts.parser().setSigningKey(ADD_SALT).parsePlaintextJws(token);
        return true;
    }

}
